package com.wgy.day33其他增强流.转换流;

import java.io.*;

/**
 * Created by pc on 2020/12/7 22:34
 * Description: LearningJava
 */
/*
java.io.InputStreamReader extends Reader
InputStreamReader:是字节流通向字符流的桥梁:可使用指定的charset读取字节并将其解码为字符.
继承来自父类的共性成员方法:
   public void close():关闭此流并释放与此流相关的任何系统资源
   public int read(): 从输入流读取一个字符,(读取单个字符并返回)
   public int read(char[] cbuf):从输入流读取一些字符,并将它们存储到字符数组cbuf中(一次读取多个字符,并将读取到的字符存储到cbuf数组中)

构造方法:
   InputStreamReader(InputStream out):创建使用默认字符编码的InputStreamReader
   InputStreamReader(InputStream out,String charsetName): 创建使用指定字符集的InputStreamReader
        参数:InputStream out:字节输入流,可以用来读取文件中保存的字节
            String charsetName:指定的编码表名称,不区分大小写,可以是UTF-8,gbk/GBK,...不指定默认使用UTF-8
使用步骤:
        1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
        2.使用InputStreamReader对象中的方法read读取文件
        3.释放资源
注意事项:
       构造方法中指定的编码名称要和文件的编码相同,否则就会发乱码
*/
public class Demo02InputStreamReader {
    public static void main(String[] args) throws IOException {
        read02();

    }
    //使用转换流读取UTF-8文件
    public static void read01() throws IOException {
        //1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
        InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\小云\\abc\\我是UTF8格式的文本.txt"),"UTF-8");
        //2.使用InputStreamReader对象中的方法read读取文件
        int len=0;
        while ((len=isr.read())!=-1){
            System.out.println((char) len);
        }
        // 3.释放资源
        isr.close();

    }
    //使用转换流读取GBK文件
    public static void read02() throws IOException {
        //1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
        InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\小云\\abc\\我是GBK格式的文本.txt"),"GBK");
        //2.使用InputStreamReader对象中的方法read读取文件
        int len=0;
        while((len=isr.read())!=-1){
            System.out.println((char)len);
        }
        // 3.释放资源
        isr.close();

    }
}
